#include<stdio.h>
#include<string.h>

int n;
void abc();
int flag2=0;

//APPEND
int * append(int *a,int n)
    {
    int i;
    int array[n+1];
    for(i=0;i<n;i++)
        {
        array[i]=*(a+i);
        }
    printf("Enter the number to be added : ");
    scanf("%d",array+n);
    int *a2=&array[0];
    return(a2);
    }

//INSERT
int * insert(int *a,int n)
    {
    int i,x;
    int array[n+1];
    printf("Enter the position it has to be added to : ");
    scanf("%d",&x);
    if(x<=n && x>0)
        {
        x=x-1;
        printf("Enter the number to be added : ");
        scanf("%d",&array[x]);
        if(x<n)
            {
            for(i=0;i<x;i++)
                {
                array[i]=*(a+i);
                }
            for(i=x+1;i<n+1;i++)
                {
                array[i]=*(a+i-1);
                }
            int *a2=&array[0];
            return(a2);
            }
        }    
    else if(x<=0)
        {
        for(i=1;i<n+1;i++)
            {
            array[i]=*(a+i-1);
            }
        printf("Enter the number to be added : ");
        scanf("%d",&array[0]);
        int *a2=&array[0];
        return(a2);
        }
    else
        {
        for(i=0;i<n;i++)
            {
            array[i]=*(a+i);
            }
        printf("Enter the number to be added : ");
        scanf("%d",&array[n]);
        int *a2=&array[0];
        return(a2);
        }
    }


//EXTEND
int * extend(int *a,int n)
    {
    int num,sum,i,j;
    printf("Enter the lenght of list: ");
    scanf("%d",&sum);
    int array[sum];
    printf("Enter the list to be added :");
    for(i=0;i<sum;i++)
        {
        scanf("%d",&array[i]);
        }
    int array2[n+sum+1];
    array2[0]=sum;
    for(i=1;i<n+1;i++)
        {
        array2[i]=*(a+(i-1));
        }
    for(i=n+1,j=0;i<n+sum+1;i++,j++)
        {
        array2[i]=array[j];
        }
    int *b=&array2[0];
    return (b);
    }


//REVEFRSE
int *reverse(int *a,int n)
    {
    int i,key,j;
    for(i=0;i<n/2;i++)
        {
        j=n-1-i;
        key=*(a+i);
        *(a+i)=*(a+j);
        *(a+j)=key;
        }
    printf("\n");
    return(a);
    }


//SORT
int *sort(int *a,int n)
    {
    int key,i,j;
    for(i=0;i<n-1;i++)
        {
        for(j=i+1;j<n;j++)
            {
            if(*(a+i)>*(a+j))
                {
                key=*(a+i);
                *(a+i)=*(a+j);
                *(a+j)=key;
                }
            }
        }
    return(a);
    }



//INDEX
int index2(int *a,int n)
    {
    int num,i;
    printf("Enter the number: ");
    scanf("%d",&num);
    int flag=0;
    for(i=0;i<n;i++)
        {
        if (num==*(a + i))
            {
            flag=1;
            break;
            }
        }
    if(flag)
        {
        printf("The index is : %d \n",i+1);
        return i+1;
        }
    else
        {
        printf("The term not in the array \n");
        flag2=1;
        abc(a,n);
        }
    }

//COUNT
int count(int *a,int n)
    {
    int num,sum,i;
    sum=0;
    printf("Enter the number: ");
    scanf("%d",&num);
    int flag=0;
    for(i=0;i<n;i++)
        {
        if (num==*(a + i))
            {
            sum=sum+1;
            }
        }
    printf("The number of times the number %d occurs is %d \n",num,sum);
    return(sum);
    }


//DELETE
int * delete(int *a,int n)
    {
    int num,i,j,flag,x;
    int b[n-1];
    flag=0;
    printf("Enter the number to be deleted : ");
    scanf("%d",&num);
    for(i=0;i<n;i++)
        {
        if(num==*(a+i))
            {
            x=i;
            flag=1;
            break;
            }
        }
    if(flag==1)
        {
        if(x==n)
            {
            for(j=0;j<n-1;j++)
                {
                a[j]=*(a+j);    
                }
            }
        else
            {
            for(j=x;j<n-1;j++)
                {
                b[j]=*(a+j+1);
                }
            for(j=0;j<x;j++)
                {
                b[j]=*(a+j);    
                }
            }
            int *b2=&b[0];
            return(b2);
        }
    else
        {
        printf("Value not in list\n");
        flag=1;
        abc(a,n);
        }
    }



//POP
int * pop(int *a,int n)
    {
    int num,i,j,flag,x;
    int b[n-1];
    flag=0;
    printf("Enter the index number to be deleted : ");
    scanf("%d",&num);
    x=num-1;
    if(x<n)
        {
        if(num==n)
            {
            for(j=0;j<n-1;j++)
                {
                b[j]=*(a+j);    
                }
            }
        else
            {
            for(j=x;j<n-1;j++)
                {
                b[j]=*(a+j+1);
                }
            for(j=0;j<x;j++)
                {
                b[j]=*(a+j);    
                }
            }
        int *b2=&b[0];
        return(b2);
        }
    else if(num==n)
        {
        for(j=0;j<n-1;j++)
            {
            b[j]=*(a+j);    
            }
        int *b2=&b[0];
        return b2;
        }    
    else
        {
        printf("Value not in list\n");
        flag =1;
        abc(a,n);
        }
    }


//MAIN
void main()
    {
    int n,i,*a;
    printf("Enter the number length of list:  ");
    scanf("%d",&n);
    int array[n];
    printf("Enter the list:  ");
    for(i=0;i<n;i++)
        {
        scanf("%d",&array[i]);
        a=&array[0];
        }
    abc(&array[0],n);
    }


//ABC
void abc(int *array,int n)
    {
    int *a=array;
    int *b;
    int i;
    char ch;
    if (flag2!=1)
        {
        printf("Enter i=insert , a=append , s=sort , r=reverse , n=index , c=count , d=delete , p=pop , o=extend , t=terminate : \n");
        scanf("%c",&ch);
        scanf("%c",&ch);
        while(ch!='t')
            {
            if(ch=='a')
                {
                b=append(a,n);
                for(i=0;i<n+1;i++)
                    {
                    *(a+i)=*(b+i);
                    }
                for(i=0;i<n+1;i++)
                    {
                    printf("%d ",*(a+i));
                    }
                printf("\n");
                n=n+1;
                }
            else if(ch=='i')
                {
                b=insert(a,n);
                for(i=0;i<n+1;i++)
                    {
                    *(a+i)=*(b+i);
                    }
                for(i=0;i<n+1;i++)
                    {
                    printf("%d ",*(a+i));
                    }
                printf("\n");
                n=n+1;
                }
            else if(ch=='r')
                {
                b=reverse(a,n);
                for(i=0;i<n;i++)
                    {
                    *(a+i)=*(b+i);
                    }
                for(i=0;i<n;i++)
                    {
                    printf("%d ",*(a+i));
                    }
                printf("\n");
                }
            else if(ch=='s')
                {
                b=sort(a,n);
                for(i=0;i<n;i++)
                    {
                    *(a+i)=*(b+i);
                    }
                for(i=0;i<n;i++)
                    {
                    printf("%d ",*(a+i));
                    }
                printf("\n");
                }
            else if(ch=='c')
                {
                int num=count(a,n);
                }
            else if(ch=='d')
                {
                for(i=0;i<n;i++)
                    {
                    printf("%d ",*(a+i));
                    }
                printf("\n");
                b=delete(a,n);
                for(i=0;i<n-1;i++)
                    {
                    *(a+i)=*(b+i);
                    }
                for(i=0;i<n-1;i++)
                    {
                    printf("%d ",*(a+i));
                    }
                printf("\n");
                n=n-1;
                }

        else if(ch=='p')
            {        
            for(i=0;i<n;i++)
                {
                printf("%d ",*(a+i));
                }
            printf("\n");
            b=pop(a,n);
            for(i=0;i<n-1;i++)
                {
                *(a+i)=*(b+i);
                }
            for(i=0;i<n-1;i++)
                {
                printf("%d ",*(a+i));
                }
            printf("\n");
            n=n-1;
            }
        else if(ch=='n')
            {
            int num=index2(a,n);
            }
        else if(ch=='o')
            {
            b=extend(a,n);
            int num=*b;
            for(i=0;i<n+num;i++)
                {
                *(a+i)=*(b+i+1);
                }
            for(i=0;i<n+num;i++)
                {
                printf("%d ",*(a+i));
                }
            printf("\n");
            n=n+num;
            }
        else
            {
            printf("incorrect comand\n");
            }
        printf("Enter i=insert , a=append , s=sort , r=reverse , n=index , c=count , d=delete , p=pop , o=extend , t=terminate : \n");
        scanf("%c",&ch);
        scanf("%c",&ch);
        }
    printf("Final list : ");
    for(i=0;i<n;i++)
        {
        printf("%d ",*(a+i));}
        printf("\n                THANK YOU\n");
        }
    }